home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / machines / amigappc / libsrc / stdio / fopen.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-24  |  1.4 KB  |  59 lines

  1. /*
  2. ** vbcc-Amiga-PowerPC version of fopen.c
  3. **
  4. ** v0.2 18.10.97 phx
  5. **      IsInteractive() included.
  6. ** v0.1 04.10.97 phx
  7. */
  8.  
  9. #include <stddef.h>
  10. #include <stdio.h>
  11. #include <limits.h>
  12. #include <stdarg.h>
  13. #include <stdlib.h>
  14. #include <powerup/gcclib/powerup_protos.h>
  15.  
  16. extern FILE *_firstfile,*_lastfile;
  17. extern ULONG DOSBase;
  18.  
  19.  
  20. static LONG IsInteractive(BPTR file)
  21. {
  22.   struct Caos MyCaos;
  23.  
  24.   MyCaos.d1 = (ULONG)file;
  25.   MyCaos.M68kCacheMode = IF_CACHEFLUSHALL;
  26.   MyCaos.PPCCacheMode = IF_CACHEFLUSHALL;
  27.   MyCaos.caos_Un.Offset = -216;
  28.   MyCaos.a6 = DOSBase;
  29.   return((LONG)PPCCallOS(&MyCaos));
  30. }
  31.  
  32.  
  33. /* opens files */
  34. /* still very limited functionality */
  35. FILE *fopen(const char *name,const char *mode)
  36. {
  37.     FILE *f;long amigamode=0;int append;
  38.     if(*mode=='w') amigamode=MODE_NEWFILE; else amigamode=MODE_OLDFILE;
  39.     if(*mode=='a') append=1; else append=0;
  40.     if(!(f=malloc(sizeof(FILE)))) return(0);
  41.     f->count=0;
  42.     f->base=0;
  43.     f->bufsize=0;
  44.     f->next=0;
  45.     if(*mode=='r') f->flags=_READABLE; else f->flags=_WRITEABLE;
  46.     if(*mode=='b') mode++;
  47.     if(*mode=='+') {f->flags|=_READABLE|_WRITEABLE;amigamode=MODE_READWRITE;}
  48.     f->filehandle=(char *)PPCOpen((STRPTR)name,amigamode);
  49.     if(!f->filehandle){free(f);return(0);}
  50.     if(IsInteractive((BPTR)f->filehandle)) f->flags|=_LINEBUF;
  51.     if(_lastfile){
  52.         _lastfile->next=f;f->prev=_lastfile;_lastfile=f;
  53.     }else{
  54.         _firstfile=_lastfile=f;
  55.     }
  56.     if(append) fseek(f,0,SEEK_END);
  57.     return(f);
  58. }
  59.